package com.itheima.reggie.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itheima.reggie.common.R;
import com.itheima.reggie.entity.Category;
import com.itheima.reggie.service.CategoryService;
import com.itheima.reggie.service.impl.CategoryServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;

//controller注解和ResponseBody注解
//ResponseBody让返回值为json数据
@RestController
//请求地址
@RequestMapping("/category")
public class CategoryController {
    @Autowired
    CategoryService service;
    //注入依赖自动装配创建业务层对象 可以调用增删改查方法/
    @Autowired
    CategoryServiceImpl categoryService=new CategoryServiceImpl();
    //添加方法
    @PostMapping
    public R addCategory(HttpSession session, @RequestBody Category category){
        //因为对象里已经有了一些数据所以我们传没有的
        //拿到登录进来存的id
        Long id = (Long) session.getAttribute("employee");
        /*//创建时间
        category.setCreateTime(LocalDateTime.now());
        //修改时间
        category.setUpdateTime(LocalDateTime.now());
        //创建人id
        category.setCreateUser(id);
        //修改人的id
        category.setUpdateUser(id);*/
        //调用业务层的添加方法把封装好的对象传进去
        categoryService.save(category);
        //返回结果
        return R.success("","添加成功");
    }
    //get请求地址为page
    @GetMapping("/page")
    //只有两个参数
    public R<HashMap> getPage(Integer page,Integer pageSize){
        //分页的对象 传入参数
        IPage<Category> pages=new Page<>(page,pageSize);
        //条件过滤
        QueryWrapper<Category>qw=new QueryWrapper<>();
        //用lambda好一些不容易写错，调用排序方法
        qw.lambda().orderByDesc(Category::getSort);
        //调用业务层的分页方法我们可以知道要两个对象 生成
        categoryService.page(pages,qw);
        //return R.success(pages,"");
        //用分页对象拿来要传几个数据和数据集合[要在调用完分页方法之后调用]
        long total = pages.getTotal();
        List<Category> records = pages.getRecords();
        //创建map对象 hashMap用哈希算法存数据没有排序底层是list,treeMap会有排序基于红黑树底层是节点
        HashMap map=new HashMap();
        //把东西塞进去
        map.put("total",total);
        map.put("records",records);
       // return R.success(pages,"");
        //把map对象返回给前端
        return R.success(map);
    }
    //删除套餐分类方法
    @DeleteMapping
    public R shanchu(Long id){
     categoryService.shanchu(id);
     return R.success("删除成功");
    }
    //修改套餐分类方法
    @PutMapping
    public R xiugai(@RequestBody Category category){
        categoryService.updateById(category);
        return R.success("修改成功");
    }
    @GetMapping("/list")
    public R SelectCatogory(Integer type){
        List<Category> categories = service.selectBytype(type);
        return R.success(categories);
    }

}
